草庐IT

c++ - std::transform 的泛化

全部标签

c++ - std::embed 增加链接时间

我阅读了提案P1040R4std::embed我了解到xxd和bin2c等工具的实际问题在于,它们在实际使用数据时会增加巨大的开销。这正是std::embed在处理大文件时试图解决的问题,我的问题是使用这个提议的功能时会影响多少编译和链接时间? 最佳答案 由于没有示例实现,因此无法准确判断。但是,没有理由认为它应该比读取文件慢得多。作为近似值,您可以使用ld-r-bbinaryfoo.png-ofoo.o并测量链接结果对象的时间。要访问数据,您将使用符号extern"C"constcharfoo_start;extern"C"con

c++ - `std::this_thread::sleep_for()` 是否有任何特定于平台的限制?

在使用std::this_thread::sleep_for()毫秒及以上时,是否需要考虑任何已知的可移植性问题?在我正在进行的项目中,我希望使用Microsoft的Sleep()到naonsleep()到usleep,具体取决于特定平台上可用的内容。其中一些具有明显的限制,例如在某些平台上不支持1000毫秒或更多的延迟。std::this_thread::sleep_for()是否也有这样的怪癖? 最佳答案 Maximumsleepduration:std::this_thread::sleep_for()这里没有问题。你想睡多久

带有 std::enable_if 的 C++ 可变参数模板部分模板特化

ITNOA我的问题是如何在可变参数模板部分模板特化场景中使用std::enable_if?例如,我有一个类使用如下所示的可变参数模板部分特化/***Commoncase.*/templatestructfoo;/***Finalsuperclassforfoo.*/templatestructfoo{voidfunc(){}};/***Regularfooclass.*/templatestructfoo:publicfoo{typedefsuperfoo;voidfunc(){coutsuper::templatefunc();}}它工作正常,但如果H是整数类型,我想要特定的部分特化

c++ - 避免使用 std::unordered_map(和其他)进行双重搜索或不必要的构造

我想在std::unordered_map上找到一个带有键的元素,或者如果它不存在则插入它。来自cppreference.com:std::unordered_map::emplaceInsertsanewelementintothecontainerconstructedin-placewiththegivenargsifthereisnoelementwiththekeyinthecontainer....Theelementmaybeconstructedeveniftherealreadyisanelementwiththekeyinthecontainer,inwhichca

c++ - 我们如何使用#pragma 警告禁用链接器警告?

我们可以禁用编译器警告#pragmawarning(disable:4966)我们如何使用#pragma指令禁用链接器警告?像这样的东西://DisablelinkerwarningLNK4221#pragmawarning(disable:4221) 最佳答案 链接器警告不能放在源文件中,因为源文件(.CPP/.C/.H等)供编译器使用,而不供链接器使用。编译将从一个或多个文件中生成目标文件(通过一个或多个“翻译单元”)。如果您将#pramadisable_linker_warning放在某个源文件中-链接器设置应该转到哪个.OB

c++ - g++ 9.1 更新后 std::stable_sort 的问题

从gcc/g++8.1更新到9.1并重新编译我的代码后,它的大部分测试都失败了。因此,进行了一些挖掘,我发现std::stable_sort是问题所在。事实证明,我调用的大部分电话都是std::stable_sort没有必要,也就是说,调用std::sort就足够了。因此,我在可能的地方进行了替换,并且针对这些代码段的测试再次成功。现在,我只有一次调用std::stable_sortvoidMshReader::determinePhysicalEntitiesRange(){//connsisnotemptystd::stable_sort(this->conns.begin(),t

c++ - 标准保证在移动 std::packaged_task 后安全使用 std::future 吗?

假设我们有以下代码:#include#includeintmain(){autopackagedTask=std::packaged_task([]{std::cout(std::move(packagedTask));autov1=packagedTaskFuture.valid();//isvalidautov2=packagedTaskFuture.wait_for(std::chrono::seconds(0));//timeoutstate(*packagedTaskPtr)();//executetaskautov3=packagedTaskFuture.wait_for(

c++ - 嵌入式应用程序从 std::string 切换到 std::wstring?

到目前为止,我一直在我的嵌入式系统(路由器、交换机、电信设备等)的C++应用程序中使用std::string。对于下一个项目,我正在考虑从std::string切换到std::wstring以获得Unicode支持。例如,这将允许最终用户在命令行界面(CLI)中使用中文字符。我应该期待什么并发症/头痛/惊喜?例如,如果我使用仍然使用std::string的第三方库怎么办?由于对国际字符串的支持对我所从事的嵌入式系统类型的要求并不是那么强烈,所以我只会在不会引起严重问题的情况下才这样做。 最佳答案 请注意,许多通信协议(protoco

c++ - 如何在 C 中实现 RFC 3393(Ipdv 数据包延迟变化)?

我正在构建一个以太网应用程序,我将从一侧发送数据包并在另一侧接收数据包。我想像RFC3393中那样计算接收方数据包的延迟。所以我必须在发送方的数据包中放置一个时间戳,然后在接收方收到数据包后立即获取时间戳。减去这些值我将得到时间戳的差异,然后用后续差异减去这个值我将得到单向ipdv延迟。两个时钟不同步。所以非常感谢任何帮助。谢谢。 最佳答案 RFC3393用于测量数据包延迟的方差,而不是用于测量延迟本身。举个例子:您正在编写一个视频流应用程序。您希望缓冲尽可能少的视频数据(以便视频尽快开始播放)。假设数据总是总是总是从机器A到机器B

c++ - 哪种方法最适合从光驱中快速读取文件?

从硬盘读取文件时,mmap通常被认为是快速将数据存入内存的好方法。使用光驱时,访问需要更多时间,而且您需要担心更高的延迟。您使用什么方法/抽象来隐藏/消除尽可能多的光驱延迟和/或总加载时间? 最佳答案 您无法使用真正的抽象。光驱具有非常特殊的特性,必须对其进行优化才能获得最佳性能。一些提示:光驱的最大killer是寻道时间。在可能的情况下,确保您正在阅读的所有文件在光盘上都是按顺序排列的,并且尽可能紧密地排列在一起。如果你必须寻找,那么就朝一个方向寻找,并尽可能少地寻找。异步读取也可以极大地提高性能。如果您需要加载和处理文件A、B和